Test edge cases on unicode string interpolation

  $ . ./setup.sh
  $ cat > x.ml <<'EOF'
  > let x = {j| Hello, $()|j}
  > EOF
  $ melc -ppx melppx x.ml
  File "x.ml", line 1, characters 8-25:
  1 | let x = {j| Hello, $()|j}
              ^^^^^^^^^^^^^^^^^
  Warning 108 [melange-uninterpreted-delimiters]: Uninterpreted delimiters j
  
  File "x.ml", line 1, characters 19-22:
  1 | let x = {j| Hello, $()|j}
                         ^^^
  Error: `' is not a valid syntax of interpolated identifer
  [2]

  $ cat > x.ml <<'EOF'
  > let x = {j| Hello, $(   )|j}
  > EOF
  $ melc -ppx melppx x.ml
  File "x.ml", line 1, characters 8-28:
  1 | let x = {j| Hello, $(   )|j}
              ^^^^^^^^^^^^^^^^^^^^
  Warning 108 [melange-uninterpreted-delimiters]: Uninterpreted delimiters j
  
  File "x.ml", line 1, characters 19-25:
  1 | let x = {j| Hello, $(   )|j}
                         ^^^^^^
  Error: `   ' is not a valid syntax of interpolated identifer
  [2]

`{j| .. |j}` interpolation is strict about string arguments

  $ cat > x.ml <<'EOF'
  > let x =
  >   let y = 3 in
  >   {j| Hello, $(y)|j}
  > EOF
  $ melc -ppx melppx x.ml
  File "x.ml", line 3, characters 15-16:
  3 |   {j| Hello, $(y)|j}
                     ^
  Error: The value y has type int but an expression was expected of type string
  [2]

  $ cat > x.ml <<'EOF'
  > module M = struct
  >   let world = "world"
  > end
  > let x = {j|Hello, $(M.world)|j}
  > EOF
  $ melc -ppx melppx x.ml
  // Generated by Melange
  'use strict';
  
  
  const world = "world";
  
  const M = {
    world: world
  };
  
  const x = "Hello, " + world;
  
  module.exports = {
    M,
    x,
  }
  /* No side effect */

This error is not super great, because `valid_lead_identifier_char` doesn't
take uppercase variables into account

  $ cat > x.ml <<'EOF'
  > module M = struct
  >   let world = "world"
  > end
  > let x = {j|Hello, $M.world|j}
  > EOF
  $ melc -ppx melppx x.ml
  File "x.ml", line 4, characters 8-29:
  4 | let x = {j|Hello, $M.world|j}
              ^^^^^^^^^^^^^^^^^^^^^
  Warning 108 [melange-uninterpreted-delimiters]: Uninterpreted delimiters j
  
  File "x.ml", line 4, characters 21-22:
  4 | let x = {j|Hello, $M.world|j}
                           ^
  Error: `' is not a valid syntax of interpolated identifer
  [2]

record field access not yet supported

  $ cat > x.ml <<'EOF'
  > module X = struct
  >   type t = { x:  int }
  > end
  > let t = { X.x = 2 }
  > let x = {j|Hello, $(t.x)|j}
  > EOF
  $ melc -ppx melppx x.ml
  File "x.ml", line 1:
  Error: Unbound module t
  [2]

  $ cat > x.ml <<'EOF'
  > let x = {j|$(hello world)|j}
  > EOF
  $ melc -ppx melppx x.ml
  File "x.ml", line 1, characters 8-28:
  1 | let x = {j|$(hello world)|j}
              ^^^^^^^^^^^^^^^^^^^^
  Warning 108 [melange-uninterpreted-delimiters]: Uninterpreted delimiters j
  
  File "x.ml", line 1, characters 14-28:
  1 | let x = {j|$(hello world)|j}
                    ^^^^^^^^^^^^^^
  Error: `hello world' is not a valid syntax of interpolated identifer
  [2]

